package cn.tedu.stage2.day05;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * 扫描指定目录中的所有.java文件，并将内容全部输出到控制台
 *
 * 例如将当前项目目录下src/io目录中的所有java文件内容输出
 * 到控制台
 *
 * 1:先要定位./src/io目录(哪个API用来描述目录?)
 * 2:获取该目录下的所有.java文件
 * 3:遍历每一个java文件，然后按行读取里面的每一行字符串
 *   并输出控制台
 */
public class Test03 {
    public static void main(String[] args) throws IOException {
        // 获取指定路径
        File dir = new File("./src/main/java/cn/tedu/stage2/io");
        if(dir.isDirectory()){
            //获取该目录下的所有java文件
            File[] subs = dir.listFiles(f->f.getName().endsWith(".java"));
            for(int i=0;i<subs.length;i++){
                System.out.println(subs[i].getName());

                FileInputStream fis = new FileInputStream(subs[i]);
                long len = subs[i].length();//通过file对象获取到文件的大小(字节量)
                System.out.println("文件大小:"+len);
                byte[] data = new byte[(int)len];//根据文件大小创建等长的字节数组
                fis.read(data);//块读取，一次性将文件所有数据读取到字节数组中
                //利用String的构造器，将字节数组中所有内容按照指定的UTF-8字符集还原为字符串
                String line = new String(data, StandardCharsets.UTF_8);
                System.out.println(line);
                fis.close();

            }
        }

    }

    /*
    提示代码:
	需要用到的语句，尝试按照正确顺序将下列代码并放在main方法中完成需求，
	并在注释中标注每句话的作用，

    //【在这里标注该句代码意义】
    for(int i=0;i<subs.length;i++){

    }
    //【在这里标注该句代码意义】
    while((line = br.readLine())!=null){

    }

    //【在这里标注该句代码意义】
    File sub = subs[i];

    //【在这里标注该句代码意义】
    BufferedReader br = new BufferedReader(
           new InputStreamReader(
                  new FileInputStream(sub)
           )
    );

    //【在这里标注该句代码意义】
    File dir = new File("./src/main/java/io");

    //【在这里标注该句代码意义】
    System.out.println(line);

    //【在这里标注该句代码意义】
    String line;

    //【在这里标注该句代码意义】
    File[] subs = dir.listFiles(f->f.getName().endsWith(".java"));
 */
}
